package cn.tedu.blog.server.mapper;

import cn.tedu.blog.server.pojo.dto.MenuAddNewDTO;
import cn.tedu.blog.server.pojo.entity.Menu;
import cn.tedu.blog.server.pojo.vo.MenuListVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author: 雷茂林
 * @Date:2022/7/17 9:12
 * @Description: 权限管理-数据库进行数据持久化操作映射
 */
@Repository
public interface MenuMapper {


    /**
     * 添加：新增权限
     * @param menu
     * @return
     */
    int createMenu(Menu menu);



    /**
     * 删除：根据权限id删除权限项
     */
    int deleteById(Long id);



    /**
     * 批量删除：根据权限id批量删除权限项
     * @param ids
     * @return
     */
    int deleteByIds(List<Long> ids);



    /**
     * 修改：根据id修改权限信息
     */
    int updateById(MenuAddNewDTO menuAddNewDTO);



    /**
     * 修改：根据权限id修改权限状态
     */
    int updateStatusById(@Param("id") Long id,@Param("status")Integer status);



    /**
     * 判断：判断修改后的名称是否已重复
     */
    int isNameExistenceById(@Param("id")Long id,@Param("name")String name);


    /**
     * 判断：判断修改后的路径名是否已重复
     */
    int isValueExistenceById(@Param("id")Long id,@Param("value")String value);



    /**
     * 判断：根据id查询该权限是否存在
     */
    Integer isMenuById(Long id);



    /**
     * 判断：根据id判断当前权限是否存在子级权限
     * @param id
     * @return
     */
    int isSonMenuById(Long id);



    /**
     * 查询：根据当前参数id查询父级id
     */
    Long isParentIdByCurrentId(Long id);



    /**
     * 查询：根据id查询权限名称
     */
    String getNameById(Long id);



    /**
     * 查询：根据id查询权限信息
     */
    MenuListVO getMenuById(Long id);



    /**
     * 查询：查询当前权限有效状态子级
     * @param id
     * @return
     */
    Long[] getSubPermissions(Long id);



  /**
     * 查询：查询当前权限全部状态子级
     * @param id
     * @return
     */
    MenuAddNewDTO[] getSubPermissionsWhole(Long id);



    /**
     * 查询：根据条件查询结果集的数量，用于计算页码
     * @return
     */
    int getCountAll(MenuListVO menuListVO);



    /**
     * 查询：根据权限id回显权限信息
     * @param id
     * @return
     */
    MenuListVO getBackFillById(Long id);



    /**
     * 查询：分页条件查询权限列表
     * @param menuListVO
     * @return
     */
    List<MenuListVO> listByKeyword(MenuListVO menuListVO);



    /**
     * 查询：权限树查询
     */
    List<MenuListVO> menuTreeList();

}
